perm filename PIXTS5.SAI[VIS,HPM]1 blob
sn#147477 filedate 1975-02-25 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00002 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 BEGIN "PIXTS5"
C00016 ENDMK
C⊗;
BEGIN "PIXTS5"
REQUIRE "VIXNIC.SAI[VIS,HPM]" SOURCE_FILE;
REQUIRE "WIXNIC.SAI[VIS,HPM]" SOURCE_FILE;
INTEGER SIZE0,W,CAMERA,CHN,WID,HIG,IAV,BIT,NORD,I,J,K,L,M,ILK,MAXF,QUAL,QUALT;
INTEGER ILS,JLS,IHS,JHS,II,JJ,LL,HPFIT;
BOOLEAN SYNA,SAME;
STRING LASTI,FN1,CAMN;
REQUIRE "⊂⊃<>" DELIMITERS;
DEFINE BOX(X1,Y1,X2,Y2)=
⊂ IF SYNA THEN
BEGIN
LINE(X1,Y1,X2,Y1);
LINE(X2,Y1,X2,Y2);
LINE(X2,Y2,X1,Y2);
LINE(X1,Y2,X1,Y1);
END
ELSE
BEGIN
DRKEN;
RECTAN(X1,Y1,X2,Y2);
LITEN;
RECTAN((3*(X1)+X2)/4,(3*(Y1)+Y2)/4,(X1+3*(X2))/4,(Y1+3*(Y2))/4);
END
⊃;
DEFINE BOX1(X1,Y1,X2,Y2)=
⊂ BEGIN
LITEN;
LINE(X1,Y1,X2,Y1);
LINE(X2,Y1,X2,Y2);
LINE(X2,Y2,X1,Y2);
LINE(X1,Y2,X1,Y1);
END
⊃;
OUTSTR("CAMERA NUMBER:"); CAMERA←CVD(CAMN←INCHWL) MOD 4;
IF LENGTH(CAMN)=0 THEN CAMERA←-1;
OUTSTR("WINDOW SIZE:"); W←CVD(INCHWL);
OUTSTR("FILTER WINDOW:"); HPFIT←CVD(INCHWL);
OUTSTR("MAX NUMBER OF FEATURES:"); MAXF←CVD(INCHWL);
OUTSTR("DUPLICATE PICTURE?"); SAME←(INCHWL LAND '137)="Y";
OUTSTR("USE SYNTHESIZER?"); SYNA←(INCHWL LAND '137)="Y";
IF CAMERA≥0 THEN
BEGIN
WID←HIG←256; BIT←4;
SIZE0←PIXDIM(HIG,WID,BIT);
OUTSTR("SIZE= "&CVS(SIZE0)&'15&'12);
END
ELSE
BEGIN
DO
BEGIN
OUTSTR("FILE 1:"); FN1←INCHWL;
SIZE0←PFLDIM(FN1);
END
UNTIL SIZE0>0;
BEGIN
INTEGER ARRAY T[0:SIZE0-1];
GETPFL(FN1,T[0]);
HIG←T[PCLN];
WID←T[LNBY];
BIT←T[BYBI];
END;
END;
NORD←0; WHILE W≤(WID MIN HIG)%2↑(NORD+1) DO NORD←NORD+1;
OUTSTR("NUMBER OF REDUCTIONS IS "&CVS(NORD)&'15&'12);
ILK←0; WHILE W%2↑(ILK+1)≥2 DO ILK←ILK+1;
OUTSTR("LEVEL FOR INTEREST OPR IS "&CVS(ILK)&'15&'12);
BEGIN
INTEGER ARRAY SIZE,PC[0:NORD];
PC[0]←0; SIZE[0]←SIZE0;
FOR I←1 STEP 1 UNTIL NORD DO
BEGIN
SIZE[I]←PIXDIM(HIG%2↑I,WID%2↑I,(BIT+2*I) MIN 10);
PC[I]←PC[I-1]+SIZE[I-1];
OUTSTR("#"&CVS(I)&" SIZE "&CVS(SIZE[I])&" PC "&CVS(PC[I])&'15&'12);
END;
BEGIN
INTEGER ARRAY PA,PB[0:PC[NORD]+SIZE[NORD]-1];
IF CAMERA≥0 THEN
BEGIN
MAKPIX(HIG,WID,4,PA[PC[0]]);
MAKPIX(HIG,WID,4,PB[PC[0]]);
OUTSTR("READING ");
CAMPIX(CAMERA,2,2,1,8,PA[PC[0]]);
IF CAMERA≠0 THEN BEGIN OUTSTR("HO HUM"); INCHWL; END;
IF ¬SAME THEN CAMPIX(CAMERA,2,2,1,8,PB[PC[0]])
ELSE COPPIC(PA[PC[0]],PB[PC[0]]);
OUTSTR("DONE"&'15&'12);
END
ELSE
BEGIN
BOOLEAN OK;
GETPFL(FN1,PA[PC[0]]);
IF ¬SAME THEN
DO
BEGIN
OUTSTR("FILE 2:");
OK←GETPFL(INCHWL,PB[PC[0]]);
END
UNTIL OK
ELSE COPPIC(PA[PC[0]],PB[PC[0]]);
END;
IF HPFIT>0 THEN
BEGIN
INTEGER ARRAY T[0:SIZE0-1];
COPPIC(PA[PC[0]],T[0]);
PASSHI(T[0],HPFIT,PA[PC[0]]);
COPPIC(PB[PC[0]],T[0]);
PASSHI(T[0],HPFIT,PB[PC[0]]);
END;
FOR I←1 STEP 1 UNTIL NORD DO
BEGIN
HAFPIC(PA[PC[I-1]],PA[PC[I]],10);
HAFPIC(PB[PC[I-1]],PB[PC[I]],10);
END;
OUTSTR("WID "&CVS(WID)&" HIG "&CVS(HIG)&'15&'12);
IF ¬SYNA THEN OUTSTR(CVOS(CHN←GDDCHN(-1))&" IS THE DD CHANNEL"&'15&'12);
DDINIT; SCREEN(-1,-1,1,1);
DRKEN; RECTAN(-1,-1,1,1); LITEN;
FOR I←1 STEP 1 UNTIL (IF SYNA THEN PA[PC[0]+BYBI] MIN 5 ELSE 1) DO
BEGIN
DRKEN; RECTAN(-1,-1,1,1);
FOR M←0 STEP 1 UNTIL NORD DO
BEGIN
K←PA[PC[M]+BYBI]-I;
VIDEO(-(1+2↑(-M))%2,1-2↑(1-M),
-(1-2↑(-M))%2,1-2↑(-M),PA[PC[M]],IF SYNA THEN 2↑K ELSE -1);
VIDEO((1+2↑(-M))%2,1-2↑(1-M),
(1-2↑(-M))%2,1-2↑(-M),PB[PC[M]],IF SYNA THEN 2↑K ELSE -1);
END;
FOR J←1,2,3 DO DPYUP(IF SYNA THEN SYNMAP(5-I) ELSE CHN);
IF ¬SYNA THEN SHOW(CHN) ELSE SHOW('47);
END;
BEGIN
INTEGER ARRAY FEAT[1:2,1:2,0:2,1:MAXF+1];
INTEGER ARRAY DD1[0:IF SYNA THEN 0 ELSE DDSIZ-1];
INTEGER NFEAT;
NFEAT←0;
IF SYNA THEN BEGIN DRKEN; RECTAN(-1,-1,1,1); LITEN; END;
IF SYNA THEN FOR J←1,2,3 DO DPYUP(SYNMAP(5));
IF ¬SYNA THEN DDSTOR(DD1[0]);
BEGIN
INTEGER ARRAY INTER[-2:(HIG%2↑ILK-1)%(W%2↑ILK)-1,
0:(WID%2↑ILK-1)%(W%2↑ILK)-1];
IAV←INTRST(PA[PC[ILK]],W%2↑ILK,INTER[0,0]);
FOR I←1 STEP 1 UNTIL (HIG%2↑ILK-1)%(W%2↑ILK)-1 DO
FOR J←1 STEP 1 UNTIL (WID%2↑ILK-1)%(W%2↑ILK)-1 DO
IF (INTER[I,J] LAND 1)≠1∧INTER[I,J]>IAV%8 THEN
BEGIN
NFEAT←(NFEAT MIN MAXF)+1;
FEAT[1,1,0,NFEAT]←INTER[I,J];
FEAT[1,1,1,NFEAT]←J*(W%2↑ILK)*2↑ILK;
FEAT[2,1,1,NFEAT]←J*(W%2↑ILK)*2↑ILK+W;
FEAT[1,1,2,NFEAT]←I*(W%2↑ILK)*2↑ILK;
FEAT[2,1,2,NFEAT]←I*(W%2↑ILK)*2↑ILK+W;
FOR K←1 STEP 1 UNTIL NFEAT-1 DO
IF FEAT[1,1,0,NFEAT]>FEAT[1,1,0,K] THEN
FOR LL←1,2 DO FOR L←0,1,2 DO FEAT[LL,1,L,NFEAT]↔FEAT[LL,1,L,K];
END;
END;
NFEAT←NFEAT MIN MAXF;
LASTI←"C";
FOR L←1 STEP 1 UNTIL NFEAT DO
BEGIN
INTEGER IL,JL,IH,JH;
IF SYNA THEN BEGIN DRKEN; RECTAN(-2,-2,2,2); LITEN; END
ELSE DDLOAD(DD1[0]);
FOR K←1 STEP 1 UNTIL L-1 DO
IF FEAT[1,2,0,K]≤8 THEN
BEGIN
BOX(<FEAT[1,1,1,K]/WID-1>,<-FEAT[1,1,2,K]/HIG>,
<FEAT[2,1,1,K]/WID-1>,<-FEAT[2,1,2,K]/HIG>);
BOX(<FEAT[1,2,1,K]/WID>,<-FEAT[1,2,2,K]/HIG>,
<FEAT[2,2,1,K]/WID>,<-FEAT[2,2,2,K]/HIG>);
END;
J←FEAT[1,1,1,L]; JJ←FEAT[2,1,1,L];
I←FEAT[1,1,2,L]; II←FEAT[2,1,2,L];
BOX(<JJ/WID-1>,<-II/HIG>,<J/WID-1>,<-I/HIG>);
FOR K←1,2,3 DO DPYUP(IF SYNA THEN SYNMAP(5) ELSE CHN);
IL←0; JL←0;
IH←HIG%2↑NORD-1; JH←WID%2↑NORD-1;
QUAL←0;
FOR M←NORD STEP -1 UNTIL 0 DO
BEGIN
INTEGER ILT,JLT,IHT,JHT,D;
BOX1(<JL*2↑M/WID>,<-IL*2↑M/HIG>,
<((JH+1)*2↑M-1)/WID>,<-((IH+1)*2↑M-1)/HIG>);
BOX1(<(J+W*(1-2↑M)%2)%WID-1>,<-(I+W*(1-2↑M)%2)/HIG>,
<(J+W*(1+2↑M)%2)/WID-1>,<-(I+W*(1+2↑M)%2)/HIG>);
FOR K←1,2,3 DO DPYUP(IF SYNA THEN SYNMAP(5) ELSE CHN);
D←0;
DO
BEGIN
D←D+1;
JLT←JL; ILT←IL; JHT←JH; IHT←IH;
JLS←(J+JJ)%2↑(M+1)-W%2↑D;
ILS←(I+II)%2↑(M+1)-W%2↑D;
JHS←(J+JJ)%2↑(M+1)+W%2↑D;
IHS←(I+II)%2↑(M+1)+W%2↑D;
QUALT←BSTCOR(PA[PC[M]],ILS,JLS,IHS,JHS,
PB[PC[M]],ILT,JLT,IHT,JHT);
QUALT←QUALT-M;
END
UNTIL QUALT≤8 ∨ W%2↑D<((6-M) MAX 2);
IL←ILT*2; JL←JLT*2;
IH←IHT*2+1+((HIG%2↑(M-1)) MOD 2);
JH←JHT*2+1+((WID%2↑(M-1)) MOD 2);
QUAL←QUAL MAX QUALT;
IF QUAL>8 THEN M←0;
END;
IL←IL%2; JL←JL%2; IH←IH%2; JH←JH%2;
FEAT[1,1,1,L]←JLS;
FEAT[2,1,1,L]←JHS;
FEAT[1,1,2,L]←ILS;
FEAT[2,1,2,L]←IHS;
FEAT[1,2,0,L]←QUAL;
FEAT[1,2,1,L]←JL;
FEAT[2,2,1,L]←JH;
FEAT[1,2,2,L]←IL;
FEAT[2,2,2,L]←IH;
BOX(<JL/WID>,<-IL/HIG>,<JH/WID>,<-IH/HIG>);
FOR K←1,2,3,4 DO DPYUP(IF SYNA THEN SYNMAP(5) ELSE CHN);
IF (M←INCHRS)>0 THEN LASTI←(M LAND '137);
IF LASTI≠"C" THEN LASTI←(INCHRW LAND '137);
END;
IF SYNA THEN BEGIN DRKEN; RECTAN(-2,-2,2,2); LITEN; END
ELSE DDLOAD(DD1[0]);
FOR K←1 STEP 1 UNTIL NFEAT DO
IF FEAT[1,2,0,K]≤8 THEN
BEGIN
BOX(<FEAT[1,1,1,K]/WID-1>,<-FEAT[1,1,2,K]/HIG>,
<FEAT[2,1,1,K]/WID-1>,<-FEAT[2,1,2,K]/HIG>);
BOX(<FEAT[1,2,1,K]/WID>,<-FEAT[1,2,2,K]/HIG>,
<FEAT[2,2,1,K]/WID>,<-FEAT[2,2,2,K]/HIG>);
END;
FOR K←1 STEP 1 UNTIL 4 DO DPYUP(IF SYNA THEN SYNMAP(5) ELSE CHN);
INCHWL;
IF ¬SYNA THEN RDDCHN(CHN);
END;
END;
END;
END;